#ifndef _TYPES_H
#define _TYPES_H

#include <map>
#include <queue>
#include <vector>
#include <list>
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#include <string>
#include "figuras\figura.h"
#include "figuras\punto.h"
#include "figuras\textura.h"
#include "figuras\color.h"
#include "Sockets\absobserver.h"
#define MUTEX "mutex"

typedef std::map<unsigned int,class AbsObserver*> MapObservers;
typedef std::vector<class ClientReceiver*> VectorClientReceiver;
typedef std::vector<class CNode*> VectorCNode;
typedef std::vector<class OutputStream> VectorOuputStream;
typedef std::list<unsigned int> QueueClient;


typedef std::list<textura*>  listaTexturas;
typedef std::list<figura*>  listaFiguras;

typedef std::vector<figura*> VectorFiguras;


struct SocketCirculo{
	punto centro;
	float radio;
	color colorBordeGrafico;
	color colorRellenoGrafico;
	int textura;
};

struct SocketRectangulo{
	punto puntoInicial;
	float ancho;
	float alto;
	color colorBordeGrafico;
	color colorRellenoGrafico;
	int textura;
};

struct SocketTriangulo{
	punto puntoA;
	punto puntoB;
	punto puntoC;
	color colorBordeGrafico;
	color colorRellenoGrafico;
	int textura;
};
struct SocketSegmento{
	punto puntoInicial;
	punto puntoFinal;
	color colorBordeGrafico;
	int textura;
};

struct Mensaje{
	unsigned int codigoMensaje;
	char* data;
};


struct PosicionPad{
	punto puntoInicial;
	int alto;
	int ancho;
};

struct PosicionTejo{
	punto puntoInicial;
	float radio;
};

struct Puntaje{
	int valor;
};

struct Bonus{
	int posicion;
	int esFinBonus;
	int estado;
};

enum BonusState{ACTIVO,NO_ACTIVO,EN_USO,NONE};



#endif 